前言

全球各机构、企业、家庭等分支的网络被认为一个LAN(Local Area Network,局域网),各分支之间通信需要跨越地理位置。

因此,就需要通过WAN(Wide Area Network,广域网)将这些分散在不同地理位置的分支网络连接起来,以便更好全网互联。

初期广域网常用的物理层标准:

  • EIA(Electronic Industries Alliance,电子工业协会)TIA(Telecommunications Industry Association,电信工业协会)制定的公共物理层接口标准EIA/TIA-232(即RS-232);
  • ITU(International Telecommunication Union,国际电信联盟)制定的串行线路接口标准V.24和V.35以及有关各种数字接口的物理和电气特性的G.703标准等。

广域网常见的数据链路层标准:

  • HDLC(High-level Data Link Control,高级数据链路控制);
  • PPP(Point-to-Point Protocol,点到点协议);
  • FR(Frame Relay,帧中继)、ATM异步传输模式等。

其中:
HDLC协议是一种通用的协议,工作在数据链路层。数据报文加上头开销和尾开销后封装成HDLC帧,只支持在点到点的同步链路上的数据传输,不支持IP地址协商与认证,过于追求高可靠性,导致数据帧开销较大,传输效率较低。

PPP协议工作在数据链路层,主要用在支持全双工的同、异步链路上,进行点到点之间的数据传输。由于它能够提供用户认证,易于扩充,并且支持同、异步通信,因而获得广泛应用。

FR是一种工业标准的、交换式的数据链路协议,通过使用无差错校验机制,加快了数据转发速度。

ATM是建立在电路交换和分组交换基础上的一种面向连接的交换技术,ATM传送信息的基本载体是53 Byte固定长度ATM信元。

当然,广域网技术,也不是只能用于广域网,在局域网内一样可以使用,比如RS232我们经常用于设备调试。

本课程主要讲解广域网技术基础概述以及PPP(Point-to-Point Protocol ,点对点协议)原理与相关应用。

重点在于理解PPP的用处与配置,报文格式与类型什么的不是很重要。

PPP

PPP协议的前身是SLIP (Serial Line Internet Protocol)协议和CSLIP (CompressedSLIP)协议,这两种协议现在已基本不再使用,但PPP协议自20世纪90年代推出以来,一直得到了广泛的应用。

PPP(Point-to-Point Protocol)协议是一种点到点链路层协议,处于TCP/IP协议栈的数据链路层,主要用于在全双工的同异步链路上进行点到点的数据传输。

由于to谐音two,因此由PPP构成的网络也称为P2P网络。

PPP主要由三类协议族组成:

  • 链路控制协议族LCP(Link Control Protocol),主要用来建立、拆除和监控PPP数据链路。
  • 网络层控制协议族NCP(Network Control Protocol),主要用来协商在该数据链路上所传输的数据包的格式与类型。
  • 扩展协议族CHAP(Challenge-Handshake Authentication Protocol)和PAP(Password Authentication Protocol),主要用于网络安全方面的认证。

PPP工作过程

状态阶段

Dead阶段(链路不可用阶段)

  • PPP链路都需从这个阶段开始和结束。
  • 当通信双方的两端检测到物理线路激活(通常是检测到链路上有载波信号)时,就会从Dead阶段跃迁至Establish阶段,即链路建立阶段。
  • 链路被断开后也同样会返回到链路不可用阶段。

Establish阶段(链路建立阶段)

  • 在Establish阶段,PPP链路进行LCP协商。
  • 协商内容包括工作方式是SP(Single-link PPP)还是MP(Multilink PPP)、最大接收单元MRU、认证方式和魔术字(magic number)等选项。
  • 当完成配置报文的交换后,则会继续向下一个阶段跃迁。
  • 下一个阶段既可能是认证阶段,也可能是网络层协商阶段;下一阶段的选择是依据链路两端的设备配置的,未配置认证则进入网络层协商阶段。

Authenticate阶段(认证阶段)

  • 默认情况下,PPP链路不进行认证。如果要求认证,在链路建立阶段必须指定认证协议。
  • PPP认证主要是用于主机和设备之间,通过PPP网络服务器交换电路或拨号接入连接的链路,偶尔也用于专用线路。
  • PPP提供密码认证协议PAP(Password Authentication Protocol)和质询握手认证协议CHAP(Challenge-Handshake Authentication Protocol)两种认证方式。

Network阶段(网络层协商阶段)

  • PPP完成了前面几个阶段,通过NCP协商来选择和配置一个网络层协议并进行网络层参数协商。
  • 每个NCP协议可在任何时间打开和关闭,当一个NCP的状态机变成Opened状态时,则PPP就可以开始在链路上承载网络层数据传输。

Terminate阶段(网络终止阶段)

  • PPP能在任何时候终止链路。当载波丢失、认证失败或管理员人为关闭链路等情况均会导致链路终止。

工作过程

PPP运行的过程简单描述如下:

  1. 通信双方开始建立PPP链路时,先进入到Establish阶段(链路建立阶段)

  2. Establish阶段(链路建立阶段),PPP链路进行LCP协商。

    协商内容包括工作方式是SP(Single-link PPP)还是MP(Multilink PPP)、最大接收单元MRU(Maximum Receive Unit)、认证方式和魔术字(magic number)等选项。

    LCP协商成功后进入Opened状态,表示底层链路已经建立。

  3. 如果配置了认证,将进入Authenticate阶段(认证阶段),开始CHAP或PAP认证。

    如果没有配置认证,则直接进入Network阶段(网络层协商阶段)

  4. Authenticate阶段(认证阶段),如果认证失败,进入Terminate阶段(网络终止阶段),拆除链路,LCP状态转为Down。

    如果认证成功,进入Network阶段(网络层协商阶段),此时LCP状态仍为Opened。

  5. Network阶段(网络层协商阶段),PPP链路进行NCP协商。

    通过NCP协商来选择和配置一个网络层协议并进行网络层参数协商。只有相应的网络层协议协商成功后,该网络层协议才可以通过这条PPP链路发送报文。

    NCP协商包括IPCP(IP Control Protocol)、MPLSCP(MPLS Control Protocol)等协商。IPCP协商内容主要包括双方的IP地址。

  6. NCP协商成功后,PPP链路将一直保持通信。

    PPP运行过程中,可以随时中断连接,物理链路断开、认证失败、超时定时器时间到、管理员通过配置关闭连接等动作都可能导致链路进入Terminate阶段(网络终止阶段)

  7. Terminate阶段(网络终止阶段),如果所有的资源都被释放,通信双方将回到Dead阶段(链路不可用阶段),直到通信双方重新建立PPP连接,开始新的PPP链路建立。

认证方式

首先我们确定一下接下来会重复提到的两个代词——“认证方”与“被认证方”的含义:

假设存在设备A与设备B,两者使用串行链路连接,运行PPP协议。

如果在设备A上配置认证条件,B需要满足认证条件,A才会“搭理”B;在此场景下A为认证方,B为被认证方。

另外,认证不只是单向的,B也可以配置认证条件,这时角色就互换了。

总之,提到认证与被认证时,是针对一个来回的PPP报文,谁去“登录”/“满足”另一方的要求时,我们就叫它是被认证方。

用于进行认证的方式有两种:PAP与CHAP。

  • PAP认证中,密码以明文方式在链路上发送,完成PPP底层链路建立后,被认证方可以主动地、不停地在链路上发送用户名和密码,直到身份认证成功为止,所以安全性不高。

    实际应用过程中,对安全性要求不高时,可以采用PAP认证建立PPP连接。

  • CHAP认证中,认证协议为三次握手认证协议,由认证方发送一个用于加密的报文后,被认证方才可以进行一次认证。

    同时它只在网络上传输用户名,而并不传输用户密码,因此安全性比PAP认证高。

    实际应用过程中,对安全性要求较高时,可以采用CHAP认证建立PPP连接。

配置

配置接口协议与IP地址:

  1. 执行命令system-view,进入系统视图。

  2. 执行命令interface interface-type interface-number,进入指定的接口视图。

  3. 执行命令link-protocol ppp,配置当前接口封装的链路层协议为PPP。

    PPP协议通常运行在串行接口上,而串行接口默认使用PPP协议。因此一般无需配置该命令。

  4. 执行命令ip address ip-address { mask | mask-length },配置接口的IP地址。

    另外也可以通过配置服务器与自动获取IP,有兴趣可以查阅相应的产品文档。

配置PAP方式认证:

配置认证方

  1. 执行命令system-view,进入系统视图。

  2. 执行命令interface interface-type interface-number,进入指定的接口视图。

  3. 执行命令ppp authentication-mode pap [ domain domain-name ],配置PPP认证方式为PAP。

    默认情况下,PPP协议不进行认证。

    匹配域中的用户与密码。如果不指定域,指使用默认域。

    如果配置domain domain-name,则指定的域必须已经通过命令domain(AAA视图)创建。

  4. 执行命令restart重启接口,或执行命令shutdown关闭接口再undo shutdown开启接口,这样PAP认证才能生效。

  5. 执行命令quit,退回到系统视图。

  6. 配置域及用户。

    这里仅介绍默认域下AAA本地认证的配置方式。

    1. 执行命令aaa,进入AAA视图。
    2. 执行命令local-user user-name **password { cipher | irreversible-cipher } ** password,创建本地帐号,并配置本地账号的登录密码。
    3. 执行命令local-user user-name service-type ppp,配置该本地用户用于PPP服务。

配置被认证方

  1. 执行命令system-view,进入系统视图。

  2. 执行命令interface interface-type interface-number,进入指定的接口视图。

  3. 执行命令ppp pap local-user username password { cipher | simple } password,配置本地被对端以PAP方式认证时,本地发送的PAP用户名和密码。

    配置的用户名和密码要和认证方配置的用户名和密码一致。

    选择simple选项时,密码将以明文形式保存在配置文件中,存在安全风险。建议使用cipher选项,将密码加密保存(仅是保存在本地配置文件时为密文)。

    PAP认证时,密码会在网络中是以明文形式传输,存在安全风险。因此更推荐使用CHAP认证。

  4. 执行命令restart重启接口,或执行命令shutdown关闭接口再undo shutdown开启接口,这样PAP认证才能生效。

配置CHAP方式认证:

配置认证方

  1. 执行命令system-view,进入系统视图。

  2. 执行命令interface interface-type interface-number,进入指定的接口视图。

  3. 执行命令ppp authentication-mode chap [ domain domain-name ],配置PPP认证方式为CHAP。

    默认情况下,PPP协议不进行认证。

    匹配域中的用户与密码。如果不指定域,指使用默认域。

    如果配置domain domain-name,则指定的域必须已经通过命令domain(AAA视图)创建。

  4. (可选)执行命令ppp chap user user-name,配置采用CHAP认证时,认证方的用户名必须为指定用户名。

    在被认证方上为认证方配置的本地用户的用户名必须跟此处配置的一致。

    一般推荐配置该命令。

  5. 执行命令restart重启接口,或执行命令shutdown关闭接口再undo shutdown开启接口,这样PAP认证才能生效。

  6. 执行命令quit,退回到系统视图。

  7. 配置域及用户。

    这里仅介绍默认域下AAA本地认证的配置方式。

    1. 执行命令aaa,进入AAA视图。
    2. 执行命令local-user user-name **password { cipher | irreversible-cipher } ** password,创建本地帐号,并配置本地账号的登录密码。
    3. 执行命令local-user user-name service-type ppp,配置该本地用户用于PPP服务。

配置被认证方

  1. 执行命令system-view,进入系统视图。

  2. 执行命令interface interface-type interface-number,进入指定的接口视图。

  3. 执行命令ppp chap user user-name,配置用于CHAP认证的用户。

    如果认证方配置了用户名检测,则此处配置的本地用户名必须跟认证方要求的用户名一致。

  4. 执行命令restart重启接口,或执行命令shutdown关闭接口再undo shutdown开启接口,这样PAP认证才能生效。

  5. 执行命令quit,退回到系统视图。

  6. 配置域及用户。

    这里仅介绍默认域下AAA本地认证的配置方式。

    1. 执行命令aaa,进入AAA视图。
    2. 执行命令local-user user-name **password { cipher | irreversible-cipher } ** password,创建本地帐号,并配置本地账号的登录密码。
    3. 执行命令local-user user-name service-type ppp,配置该本地用户用于PPP服务。

案例

以最简单的拓扑进行配置演示,注意如果要在模拟器进行实验,需要在路由器未开机时,右键设置,从下方选择串口卡拖拽安装在设备上。

配置基础参数,设备互通

1
2
3
4
<Huawei>system-view 
[Huawei]sysname R1
[R1]interface Serial 4/0/0
[R1-Serial4/0/0]ip address 12.1.1.1 24
1
2
3
4
<Huawei>system-view 
[Huawei]sysname R2
[R2]interface Serial 4/0/0
[R2-Serial4/0/0]ip address 12.1.1.2 24

配置协议为ppp,以及配置ip地址后,R1与R2即可进行通信。

1
2
3
4
5
6
7
8
9
10
11
12
13
[R1]ping 12.1.1.2
PING 12.1.1.2: 56 data bytes, press CTRL_C to break
Reply from 12.1.1.2: bytes=56 Sequence=1 ttl=255 time=20 ms
Reply from 12.1.1.2: bytes=56 Sequence=2 ttl=255 time=30 ms
Reply from 12.1.1.2: bytes=56 Sequence=3 ttl=255 time=30 ms
Reply from 12.1.1.2: bytes=56 Sequence=4 ttl=255 time=20 ms
Reply from 12.1.1.2: bytes=56 Sequence=5 ttl=255 time=20 ms

--- 12.1.1.2 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 20/24/30 ms

配置PAP方式的PPP连接

假设R1为认证方(进行“验证”),R2为被认证方(进行“登录”)

在R1配置:

1
2
3
4
5
6
7
8
9
10
# 创建名为magiku,密码为magiku030的账号,并配置该账号用于ppp协议。
[R1]aaa
[R1-aaa]local-user magiku password cipher magiku030
Info: Add a new user.
[R1-aaa]local-user magiku service-type ppp
[R1-aaa]q
# 在串口下配置开启PAP认证,并重启接口以启用配置。
[R1]interface Serial 4/0/0
[R1-Serial4/0/0]ppp authentication-mode pap
[R1-Serial4/0/0]restart

此时再去测试,就会发现R1与R2无法互通了。

1
2
3
4
5
6
7
8
9
10
11
12
[R1]ping 12.1.1.2
PING 12.1.1.2: 56 data bytes, press CTRL_C to break
Request time out
Request time out
Request time out
Request time out
Request time out

--- 12.1.1.2 ping statistics ---
5 packet(s) transmitted
0 packet(s) received
100.00% packet loss

接下来配置R2:

1
2
3
[R2]interface Serial 4/0/0
[R2-Serial4/0/0]ppp pap local-user magiku password cipher magiku030
[R2-Serial4/0/0]restart

现在R1与R2又能通信了:

1
2
3
4
5
6
7
8
9
10
11
12
13
[R2]ping 12.1.1.1
PING 12.1.1.1: 56 data bytes, press CTRL_C to break
Reply from 12.1.1.1: bytes=56 Sequence=1 ttl=255 time=30 ms
Reply from 12.1.1.1: bytes=56 Sequence=2 ttl=255 time=20 ms
Reply from 12.1.1.1: bytes=56 Sequence=3 ttl=255 time=20 ms
Reply from 12.1.1.1: bytes=56 Sequence=4 ttl=255 time=20 ms
Reply from 12.1.1.1: bytes=56 Sequence=5 ttl=255 time=10 ms

--- 12.1.1.1 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 10/20/30 ms

另外我们可以看看所谓的密文保存,可以看到原本配置的密码,保存在配置里时,是以密文的方式存储。

配置CHAP方式的PPP连接

假设R1为认证方(进行“验证”),R2为被认证方(进行“登录”)

在R1配置:

1
2
3
4
5
6
7
8
9
10
11
# 创建名为magiku,密码为magiku030的账号,并配置该账号用于ppp协议。
[R1]aaa
[R1-aaa]local-user magiku password cipher magiku030
Info: Add a new user.
[R1-aaa]local-user magiku service-type ppp
[R1-aaa]q
# 在串口下配置开启chap认证,并重启接口以启用配置。
[R1]interface Serial 4/0/0
[R1-Serial4/0/0]ppp authentication-mode chap
[R1-Serial4/0/0]ppp chap user magiku
[R1-Serial4/0/0]restart

此时再去测试,就会发现R1与R2无法互通了。

1
2
3
4
5
6
7
8
9
10
11
12
[R1]ping 12.1.1.2
PING 12.1.1.2: 56 data bytes, press CTRL_C to break
Request time out
Request time out
Request time out
Request time out
Request time out

--- 12.1.1.2 ping statistics ---
5 packet(s) transmitted
0 packet(s) received
100.00% packet loss

接下来配置R2:

1
2
3
4
5
6
7
8
9
10
# 创建名为magiku,密码为magiku030的账号,并配置该账号用于ppp协议。
[R2]aaa
[R2-aaa]local-user magiku password cipher magiku030
Info: Add a new user.
[R2-aaa]local-user magiku service-type ppp
[R2-aaa]q
# 在串口下配置使用账号magiku进行chap认证,并重启接口以启用配置。
[R2]interface Serial 4/0/0
[R2-Serial4/0/0]ppp chap user magiku
[R2-Serial4/0/0]restart

现在R1与R2又能通信了:

1
2
3
4
5
6
7
8
9
10
11
12
13
[R2]ping 12.1.1.1
PING 12.1.1.1: 56 data bytes, press CTRL_C to break
Reply from 12.1.1.1: bytes=56 Sequence=1 ttl=255 time=30 ms
Reply from 12.1.1.1: bytes=56 Sequence=2 ttl=255 time=20 ms
Reply from 12.1.1.1: bytes=56 Sequence=3 ttl=255 time=20 ms
Reply from 12.1.1.1: bytes=56 Sequence=4 ttl=255 time=30 ms
Reply from 12.1.1.1: bytes=56 Sequence=5 ttl=255 time=30 ms

--- 12.1.1.1 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 20/26/30 ms

PPPoE

PPPoE(PPP over Ethernet)协议是一种把PPP帧封装到以太网帧中的链路层协议。

运营商/服务商希望把一个站点上的多台主机连接到同一台远程接入设备,同时接入设备能够提供与拨号上网类似的访问控制和计费功能(比如校园网)。

在众多的接入技术中,把多个主机连接到接入设备的最经济的方法就是以太网,而PPP协议可以提供良好的访问控制和计费功能,于是产生了在以太网上传输PPP报文的技术,即PPPoE。

PPPoE利用以太网将大量主机组成网络,通过一个远端接入设备连入因特网,并运用PPP协议对接入的每个主机进行控制,具有适用范围广、安全性高、计费方便的特点。

工作原理与过程

要在以太网中,满足该需求,需要配置PPPoE Server,也就是服务端;以Client/Server模型进行组网。

其他一般主机作为PPPoE Client向PPPoE Server发起连接请求,而PPPoE Server则为PPPoE Client提供接入控制、认证等功能。

主机的这个请求动作,我们称为PPPoE拨号。

PPPoE拨号可分为三个阶段,即Discovery(发现)阶段、Session(会话)阶段和Terminate(终止)阶段。

Discovery(发现)阶段

Discovery阶段,相当于原始PPP协议的底层链路建立阶段,该阶段由四个过程组成:

注意图片内的顺序。

  1. PPPoE Client广播发送一个PADI(PPPoE Active Discovery Initial)报文,在此报文中包含PPPoE Client想要得到的服务类型信息。

  2. 所有的PPPoE Server收到PADI报文之后,将其中请求的服务与自己能够提供的服务进行比较,如果可以提供,则单播回复一个PADO(PPPoE Active Discovery Offer)报文。

  3. 根据网络的拓扑结构,PPPoE Client可能收到多个PPPoE Server发送的PADO报文;

    PPPoE Client选择最先收到的PADO报文对应的PPPoE Server做为自己的PPPoE Server,并向其单播发送一个PADR(PPPoE Active Discovery Request)报文。

  4. PPPoE Server产生一个唯一的会话ID(Session ID),标识和PPPoE Client的这个会话;即通过发送一个PADS(PPPoE Active Discovery Session-confirmation)报文把会话ID发送给PPPoE Client。

    完成之后通信双方都会知道PPPoE的Session_ID以及对方的以太网地址,它们共同确定了唯一的PPPoE Session。

而会话建立成功后便进入PPPoE Session阶段。

Session(会话)阶段

PPPoE Session阶段可划分为两部分,一是PPP协商阶段,二是PPP数据传输阶段。

PPPoE Session上的PPP协商和普通的PPP协商方式一致,分为LCP、认证、NCP三个阶段。

  1. LCP阶段主要完成建立、配置和检测数据链路连接。
  2. LCP协商成功后,开始进行认证,认证协议类型由LCP协商结果(CHAP或者PAP)决定。
  3. 认证成功后,PPP进入NCP阶段,即数据传输阶段。
  4. NCP是一个协议族,用于配置不同的网络层协议,常用的是IP控制协议(IPCP),它主要负责协商用户的IP地址和DNS服务器地址。
  5. PPPoE Session的PPP协商成功后,就可以承载PPP数据报文。在PPPoE Session阶段所有的以太网数据包都是单播发送的。

Terminate(终止)阶段

PPP通信双方可以使用PPP协议自身来结束PPPoE会话,当无法使用PPP协议结束会话时可以使用PADT(PPPoE Active Discovery Terminate)报文。

进入PPPoE Session阶段后,PPPoE Client和PPPoE Server都可以通过发送PADT报文的方式来结束PPPoE连接。

PADT数据包可以在会话建立以后的任意时刻单播发送。

在发送或接收到PADT后,就不允许再使用该会话发送PPP流量了。

小结

总的来说,Discovery(发现)阶段是通过以太网与PPPoE去搭建底层链路;

Session(会话)阶段与Terminate(终止)阶段就都是原始PPP协议的技术内容。

配置

服务端配置

基础配置:

  1. 执行命令system-view,进入系统视图。

  2. 执行命令interface virtual-template vt-number,创建并进入虚拟接口模板视图。

    相当于虚拟出一个用于PPP通信的接口,之后需要将该虚拟接口绑定在互联网通信接口上。

  3. 执行命令ip address ip-address { mask | mask-length },配置虚拟接口模板的IP地址。

  4. (可选)执行命令ppp keepalive in-traffic check,配置设备作为PPPoE Server时,有入方向的流量就不发送心跳报文。

    默认情况下,设备作为PPPoE Server会定时发送心跳报文。

    设备作为PPPoE Server接入大量用户时,为了减少心跳报文对网络资源的占用,可以配置在有入方向的流量时,PPPoE Server不发送心跳报文。

  5. 执行命令quit,退回到系统视图。

  6. 执行命令interface interface-type interface-number,进入接口视图。

  7. 执行命令pppoe-server bind virtual-template vt-number,将指定的虚拟模板绑定到接口上,并在接口上启用PPPoE Server功能。

配置为客户端分配IP:

  1. 执行命令system-view,进入系统视图。

  2. 执行命令ip pool ip-pool-name,创建全局地址池并进入全局地址池视图。

  3. 执行命令network ip-address [ mask { mask | mask-length } ],配置地址池下的IP地址范围。

  4. 执行命令gateway-list ip-address,配置地址池的出口网关地址。

  5. 执行命令quit,退回到系统视图。

  6. 执行命令interface virtual-template vt-number,进入虚拟接口模板视图。

  7. 执行命令remote address pool pool-name,指定为PPPoE Client分配IP地址的地址池。

    注意:虚拟接口模板的IP地址必须和地址池的地址在同一网段,否则,会造成用户无法上线。

  8. (可选)执行命令ppp ipcp dns primary-dns-address [ secondary-dns-address ],配置PPPoE Server为PPPoE Client指定DNS服务器地址。

配置开启认证:

  1. 执行命令system-view,进入系统视图。

  2. 执行命令interface virtual-template vt-number,进入虚拟接口模板视图。

  3. 执行命令ppp authentication-mode { chap | pap } [ domain domain-name ],配置虚拟接口模板的PPP认证方式。

    如果配置domain参数,则指定的域必须已经通过命令domain domain-name创建。

    PAP认证时,密码会在网络中以明文形式传输,存在安全风险。推荐使用CHAP认证。

  4. (可选)执行命令ppp chap user username,配置采用CHAP认证时认证方的用户名。

  5. 执行命令quit,退回到系统视图。

  6. 配置PPPoE认证用户。

    这里仅介绍缺省域下AAA本地认证的配置方式:

    1. 执行命令aaa,进入AAA视图。
    2. 执行命令local-user user-name **password { cipher | irreversible-cipher } ** password,创建本地帐号,并配置本地账号的登录密码。
    3. 执行命令local-user user-name service-type ppp,配置本地用户使用的服务类型为PPP。

客户端配置

基础配置:

  1. 执行命令system-view,进入系统视图。

  2. 执行命令interface dialer number,创建Dialer接口并进入Dialer接口视图。

    与服务端的虚拟接口模板一样,客户端的Dialer接口稍后也需要绑定互联网接口。

  3. 执行命令dialer user user-name,配置接口用户名,该用户名必须与对端服务器的PPP用户的用户名一致。

  4. 执行命令dialer bundle number,指定Dialer接口使用的Dialer bundle,用于后续配置拨号时绑定该接口。

    • 直接配置IP地址:

    执行命令ip address ip-address { mask | mask-length },配置Dialer接口的IP地址。

    • 配置由对端分配IP地址:

      执行命令ip address ppp-negotiate,配置本端接口的IP地址由对端的PPP服务端分配。

启用配置/配置拨号:

  1. 执行命令system-view,进入系统视图。

  2. 执行命令interface interface-type interface-number,进入接口视图。

  3. 执行命令pppoe-client dial-bundle-number number [ on-demand ] [ no-hostuniq ] [ ppp-max-payload value ] [ service-name name ],指定PPPoE会话所对应的Dialer bundle。相当于将前面配置的PPP接口绑定到该互联网接口。

    指定的Dialer bundle编号必须和基础配置中接口的dialer bundle命令配置的编号保持一致。

    • 如果不配置参数on-demand,则PPPoE拨号方式为永久在线方式:

      当物理线路Up后,设备会立即发起PPPoE呼叫,建立PPPoE会话。除非用户使用命令undo pppoe-client dial-bundle-number删除PPPoE会话,否则此PPPoE会话将一直存在。

    • 如果配置参数on-demand,则PPPoE拨号方式为按需拨号方式,目前设备支持的按需拨号方式为报文触发方式。

      报文触发方式:当物理线路Up后,设备不会立即发起PPPoE呼叫,只有当有数据需要传送时,设备才会发起PPPoE呼叫,建立PPPoE会话。

      如果PPPoE链路的空闲时间超过用户在Dialer接口下配置的dialer timer idle seconds,设备会自动终止PPPoE会话,直到有新的数据需要被传送,PPPoE会话才会被重新建立。

    • 无论PPPoE拨号方式为永久在线方式或报文触发方式,使用undo pppoe-client dial-bundle-number命令都会永久删除PPPoE会话。如果需要重新建立PPPoE会话,用户需要重新配置。

    • 如果不配置参数no-hostuniq,则表示在PPPoE Client发起的呼叫中携带Host-Uniq字段,用于与主机的某个唯一特定的请求联系起来,使检查更加严格。

  4. 执行命令quit,回到系统视图。

  5. 执行命令ip route-static 0.0.0.0 0 { nexthop-address | interface-type interface-number } [ preference preference ],配置到PPPoE Server的静态路由。

如果采用按需拨号的方式,需进行如下配置:

  1. 执行命令dialer-rule,进入Dialer-rule视图(拨号访问控制视图)。

  2. 执行命令dialer-rule dialer-rule-number { acl { acl-number | name acl-name } | ip { deny | permit } | ipv6 { deny | permit } }

    创建拨号访问控制列表,并指定规则。

  3. 执行命令quit,退回到系统视图。

  4. 执行命令interface dialer number,创建Dialer接口并进入Dialer接口视图。

  5. 执行命令dialer-group group-number,配置接口所属的拨号访问组,即采用哪个拨号访问控制列表(规则)。

    必须确保命令dialer-group中的参数group-number和命令dialer-rule中的dialer-rule-number保持一致。

配置被认证:

  1. 执行命令system-view,进入系统视图。

  2. 执行命令interface dialer number,进入Dialer接口视图。

  3. 配置PPP认证的用户名和密码。

    • 配置PAP认证:

      1. 执行命令ppp pap local-user username password { cipher | simple } password,配置PPPoE Client被PPPoE Server以PAP方式认证时,PPPoE Client发送的PAP用户名和密码。

        配置的用户名和密码要和PPPoE Server的用户名和密码一致。

        选择simple选项时,密码将以明文形式保存在配置文件中,存在安全风险。建议使用cipher选项,将密码加密保存。

    • 配置CHAP认证,且PPPoE Server配置认证用户名:

      1. 执行命令ppp chap user username,配置CHAP认证的用户名。

        配置的用户名要和PPPoE Server的用户名保持一致。

      2. 执行命令quit,退回到系统视图。

      3. 配置PPPoE认证用户。

        1. 执行命令aaa,进入AAA视图。

        2. 执行命令local-user user-name **password { cipher | irreversible-cipher } ** password,创建本地帐号,并配置本地账号的登录密码。

          配置的密码要和PPPoE Server的认证密码一致。

        3. 执行命令local-user user-name service-type ppp,配置本地用户使用的服务类型为PPP。

    • 配置CHAP认证,且PPPoE Server没有配置认证用户名:

      1. 执行命令ppp chap user username,配置CHAP认证的用户名。

      2. 执行命令ppp chap password { cipher | simple } password,配置CHAP认证的密码。

        选择simple选项时,密码将以明文形式保存在配置文件中,存在安全风险。建议使用cipher选项,将密码加密保存。

案例

依旧使用简单的拓扑,但这次我们是使用以太网链路。

当前两台路由器都清空配置了。

配置基础互通

服务端配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<Huawei>system-view 
[Huawei]sysname R1
# 创建给客户端分配ip的地址池,并配置网关
[R1]ip pool p1
[R1-ip-pool-p1]network 12.1.1.0 mask 24
[R1-ip-pool-p1]gateway-list 12.1.1.1
[R1-ip-pool-p1]q
# 创建虚拟接口模板,配置IP,启用ip地址池进行分配,启用dns分配
[R1]interface Virtual-Template 1
[R1-Virtual-Template1]ip address 12.1.1.1 24
[R1-Virtual-Template1]remote address pool p1
[R1-Virtual-Template1]ppp ipcp dns 223.5.5.5 8.8.8.8
[R1-Virtual-Template1]q
# 将虚拟接口模板绑定在以太网接口g0/0/0上
[R1]interface g0/0/0
[R1-GigabitEthernet0/0/0]pppoe-server bind virtual-template 1

客户端配置

1
2
3
4
5
6
7
8
9
10
11
<Huawei>system-view 
[Huawei]sysname R2
[R2]interface Dialer 1
[R2-Dialer1]dialer user magiku
[R2-Dialer1]dialer bundle 1
[R2-Dialer1]ip address ppp-negotiate
[R2-Dialer1]q
[R2]interface g0/0/0
[R2-GigabitEthernet0/0/0]pppoe-client dial-bundle-number 1
[R2-GigabitEthernet0/0/0]q
[R2]ip route-static 0.0.0.0 0 g0/0/0

值得注意的是,如果不配置dialer user,就无法配置dialer bundle,提示如下:

1
2
[R2-Dialer1]dialer bundle 1
INFO: Enable RS-DCC first ( dialer user ).

而如果不配置dialer bundle,那么就没办法在以太网接口下配置pppoe-client dial-bundle-number绑定PPP虚拟接口。

但是呢!可以看到我配置了dialer user magiku,而实际上我并没有在服务端配置该用户,但这样配置后,R1已经可以与R2通信了。

同时,我们查看路由表可以推断出R2被分配了12.1.1.254的ip地址。(因为存在该主机路由,且路由的下一跳为127.0.0.1,即自己)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[R2]ping 12.1.1.1
PING 12.1.1.1: 56 data bytes, press CTRL_C to break
Reply from 12.1.1.1: bytes=56 Sequence=1 ttl=255 time=40 ms
Reply from 12.1.1.1: bytes=56 Sequence=2 ttl=255 time=20 ms
Reply from 12.1.1.1: bytes=56 Sequence=3 ttl=255 time=20 ms
Reply from 12.1.1.1: bytes=56 Sequence=4 ttl=255 time=30 ms
Reply from 12.1.1.1: bytes=56 Sequence=5 ttl=255 time=20 ms

--- 12.1.1.1 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 20/26/40 ms

[R2]display ip routing-table
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
Destinations : 6 Routes : 6

Destination/Mask Proto Pre Cost Flags NextHop Interface

12.1.1.1/32 Direct 0 0 D 12.1.1.1 Dialer1
12.1.1.254/32 Direct 0 0 D 127.0.0.1 Dialer1
127.0.0.0/8 Direct 0 0 D 127.0.0.1 InLoopBack0
127.0.0.1/32 Direct 0 0 D 127.0.0.1 InLoopBack0
127.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0
255.255.255.255/32 Direct 0 0 D 127.0.0.1 InLoopBack0

配置开启chap认证:

服务端配置

1
2
3
4
5
6
7
8
9
10
# 创建用于认证的账号、密码
[R1]aaa
[R1-aaa]local-user magiku password cipher magiku030
Info: Add a new user.
[R1-aaa]local-user magiku service-type ppp
[R1-aaa]q
# 在ppp虚拟接口下启用认证,并指定必须使用名为magiku的账密进行认证。
[R1]interface Virtual-Template 1
[R1-Virtual-Template1]ppp authentication-mode chap
[R1-Virtual-Template1]ppp chap user magiku

客户端配置

1
2
3
4
5
6
7
8
9
# 创建用于认证的账号、密码
[R2]aaa
[R2-aaa]local-user magiku password cipher magiku030
Info: Add a new user.
[R2-aaa]local-user magiku service-type ppp
[R2-aaa]q
# 在ppp虚拟接口下启用被认证,并指定必须使用名为magiku的账密进行认证。
[R2]interface Dialer 1
[R2-Dialer1]ppp chap user magiku

现在也能互相通信。